import VueRouter from 'vue-router'

// // 对路由提供的 push 和 replace 方法进行增强
// const originPush = VueRouter.prototype.push

// // 开始对 push 方法进行增强
// // 第一个：跳转的路由
// // 第二个：成功以后的回调
// // 第三个：失败以后的回调
// VueRouter.prototype.push = function (path, successCb, errorCb) {
//   // successCb 用户传递了成功回调，就是 true，走 if
//   // 如果 successCb 没有没有传，就以 errorCb 为准，如果 errorCb 传递了，就是 true，也有 if
//   // 如果用户 successCb 、errorCb 都传递了，肯定会走 if
//   if (successCb || errorCb) {
//     // 如果 successCb 不传就是 undefined
//     originPush.call(this, path, successCb, errorCb)
//   } else {
//     // 如果用户没有传递第二个、第三个回调都没传，就会走 else
//     // 直接使用 catch 捕获异常即可
//     originPush.call(this, path).catch(() => {})
//   }
// }

// -------------------- 以下是批量增强 --------------------

// 对路由提供的 push 和 replace 方法进行增强
const methods = ['push', 'replace']

// 既然需要对 push 和 replace ，肯定需要都处理，就先遍历
methods.forEach((method) => {
  // 对 push 和 replace 方法进行缓存
  const originMethod = VueRouter.prototype[method]

  // 对 push 和 replace 进行增强
  VueRouter.prototype[method] = function (path, successCb, errorCb) {
    if (successCb || errorCb) {
      originMethod.call(this, path, successCb, errorCb)
    } else {
      originMethod.call(this, path).catch(() => {})
    }
  }
})
